package com.sf.marathon.soul.core.base;

/**
 * 通用查询接口
 */
public interface Searchable {

    /**
     * 创建一个新的查询
     *
     * @return
     */
    static Searchable newSearchable() {
        return new SearchRequest();
    }

    /**
     * <p>
     * 添加过滤条件 如key="id_eq" value = 1
     * 如果添加时不加操作符 默认是custom
     * 其中key为javaBean的属性，小驼峰
     * </p>
     *
     * @param key   如 name_like
     * @param value 如果是in查询 多个值之间","分隔
     * @return
     */
    Searchable addSearchParam(final String key, final Object value);

    /**
     * @param key
     * @param value
     * @param isTableField 是否为表字段
     * @return
     */
    Searchable addSearchParam(final String key, final Object value, boolean isTableField);

    /**
     * 添加排序，升序，columns中为javaBean属性，而非表字段
     *
     * @param columns
     * @return
     */
    Searchable addAscSort(final String columns);

    /**
     * 添加排序，降序，columns中为javaBean属性，而非表字段
     *
     * @param columns
     * @return
     */
    Searchable addDescSort(final String columns);

    /**
     * 获取查询条件对应的参数值，key值的形式：字段名_操作符
     *
     * @param key
     * @return
     */
    Object getSearchParam(final String key);
}
